package com.server.common.logistice.sfd.create;

import com.google.gson.annotations.SerializedName;
import com.server.common.logistics.request.LogisticsRequest;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor
@Getter
@Setter
public class SFDCreateOrderRequest extends LogisticsRequest {

    private List<CargoDetails> cargoDetails = new ArrayList<>();

    private List<ContactInfo> contactInfoList = new ArrayList<>();

    //响应报文的语言， 缺省值为zh-CN， 目前支持以下值zh-CN 表示中文简体， zh-TW或zh-HK或 zh-MO表示中文繁体， en表示英文
    private String language = "zh-CN";

    //客户订单号
    private String orderId;

    //付款方式，支持以下值： 1:寄方付 2:收方付 3:第三方付
    private Integer payMethod;

    //快件产品类别， 支持附录 《快件产品类别表》 的产品编码值，仅可使用与顺丰销售约定的快件产品
    private Integer expressTypeId;

    //顺丰月结卡号 月结支付时传值，现结不需传值；沙箱联调可使用测试月结卡号7551234567（非正式，无须绑定，仅支持联调使用）
    private String monthlyCard;

    @Data
    public static class CargoDetails {
        //货物数量 跨境件报关需要填写
        private int count;
        //货物单位，如：个、台、本， 跨境件报关需要填写
        private String unit;
        //订单货物单位重量，包含子母件， 单位千克，精确到小数点后3位 跨境件报关需要填写
        private BigDecimal weight;
        //货物单价，精确到小数点后3位， 跨境件报关需要填写
        private BigDecimal amount;
        //货物单价的币别
        private String currency;
        //货物名称，如果需要生成电子 运单，则为必填
        private String name;
        //原产地国别
        private String sourceArea;
    }

    @Data
    public static class ContactInfo {
        //详细地址，若有四级行政区划，如镇/街道等信息可拼接至此字段，格式样例：镇/街道+详细地址。若province/city 字段的值不传，此字段必须包含省市信息，避免影响原寄地代码识别，如：广东省深圳市福田区新洲十一街万基商务大厦10楼；此字段地址必须详细，否则会影响目的地中转识别；
        private String address;
        //联系人
        private String contact;
        //地址类型： 1，寄件方信息 2，到件方信息
        private Integer contactType;
        //省级
        private String province;
        //地级
        private String city;
        //所在县/区级行政区名称，必须 是标准的县/区称谓，如：福田区，南涧彝族自治县、准格尔旗等
        private String country;
        //邮编，跨境件必填（中国内地， 港澳台互寄除外）
        private String postCode;
        //联系电话
        private String tel;
        //手机
        private String mobile;
        //公司名称
        private String company;
    }

}
